## Sign Up Field Order The Authenticator respects the order of the Sign Up fields that are provided in the `signUpFields(_:)` call. If the Authenticator automatically adds a required missing attribute (e.g. the verification mechanism), it will appear at the end. ## Field Customization When providing Sign Up Fields, you can use the default ones or define your own: ```swift Authenticator { _ in Text("You are logged in!") }.signUpFields([ .username() // Default field for username .password(isRequred: false) // Makes password optional .text( // A customized text field for the Website attribute key = .website, // A AuthUserAttributeKey label = "Website", // Custom label placeholder = "Enter your website" // Custom placeholder isRequired: true, // Makes field mandatory validator: { content in // Custom validator guard content.contains("example.com") else { return "Your website must have a domain of example.com" } return nil } ), .custom( // A fully custom field for a Custom attribute attributeType: .custom(attributeKey: .custom("TOS")), validator: { content in guard let selected = Bool(content), selected else { return "You must agree to the Terms of Service" } return nil } ) { binding in Toggle(isOn: binding.asBool()) { Text("I agree to the terms of service") } } ]) // ... // Custom extension to convert a Binding<String> into a Binding<Bool> extension Binding where Value == String { func asBool() -> Binding<Bool> { return .init( get: { return Bool(wrappedValue) ?? false }, set: { value in wrappedValue = String(value) } ) } } ```